package social.server.main;

import java.util.ArrayList;
import java.util.List;

public class Inbox {

	private String owner;
	private List<Thread> vector = new ArrayList<Thread>();
	
	/**
	 * Cria uma Inbox
	 * @param owner Login do dono da Inbox.
	 */
	public Inbox(String owner) {
		super();
		this.owner = owner;
	}
	/**
	 * Esse método testa se na Inbox há uma thread.
	 * @param subject Assunto da thread.
	 * @return true se contém, false se não.
	 */
	public boolean containsThread(String subject) {
		for (int i = 0; i<vector.size(); i++){
			if (vector.get(i).getSubject().equals(subject)){
				return true;
			}
		}
		return false;
	}
	/**
	 * Retorna uma Thread.
	 * @param subject O assunto da Thread.
	 * @return O objeto Thread.
	 */
	public Thread getThread(String subject) {
		Thread toReturn = null;
		for (int i = 0; i<vector.size(); i++){
			if (subject.equals(vector.get(i).getSubject())){
				toReturn = vector.get(i);
			}
		}
		return toReturn;
	}
	/**
	 * Retorna A representação em String de uma Thread
	 * @param subject O assunto da Thread
	 * @return A representação String.
	 */
	public String getThreadString(String subject){
		String toReturn = null;
		for (int i = 0; i<vector.size(); i++){
			if (subject.equals(vector.get(i).getSubject())){
				toReturn = vector.get(i).toString();
			}
		}
		return toReturn;
	}
	/**
	 * Retorna o nome do dono.
	 * @return Nome do dono.
	 */
	public String getOwner() {
		return owner;
	}
	/**
	 * Adiciona uma Thread na Inbox
	 * @param thread A Thread a ser adicionada.
	 */
	public void addThread(Thread thread){
		vector.add(0,thread);
	}
	/**
	 * Retorna uma String com os assuntos das Threads.
	 * @param type O tipo de Thread.
	 * @return A String com os assuntos.
	 */
	public String getThreadList(String type){
		if (type.equals("All")){
			return listAllThreads();
		}
		else if (type.equals("Negotiation")){
			return listNegotiationThreads();
		}
		else if (type.equals("OffTopic")){
			return listOffTopicThreads();
		}
		else
			return null;
	}

	private String listOffTopicThreads(){
		String retorno = "";
		for (int i = 0; i < size() ;i++){
			if (!(vector.get(i) instanceof social.server.main.NegotiationThread)){
				retorno = retorno.concat("; ");
				retorno = retorno.concat(vector.get(i).getSubject());
			}
		}
		if (retorno.equals(""))
			return null;
		return retorno.substring(2);
	}

	private String listNegotiationThreads() {
		String retorno = "";
		for (int i = 0; i < size() ;i++){
			if (vector.get(i) instanceof social.server.main.NegotiationThread){
				retorno = retorno.concat("; ");
				retorno = retorno.concat(vector.get(i).getSubject());
			}
		}
		if (retorno.equals(""))
			return null;
		return retorno.substring(2);
	}

	private String listAllThreads(){
		String retorno = "";
		for (int i = 0; i < size() ;i++){
			retorno = retorno.concat("; ");
			retorno = retorno.concat(vector.get(i).getSubject());
		}
		if (retorno.equals(""))
			return null;
		return retorno.substring(2);
	}
	/**
	 * Diz o tamanho da Inbox
	 * @return Um int, o tamanho da Inbox.
	 */
	public int size() {
		return vector.size();
	}
	public void reorganize(String subject) {
		Thread toOrganize = null;
		for (int i = 0; i<vector.size(); i++){
			if (subject.equals(vector.get(i).getSubject())){
				toOrganize = vector.get(i);
				vector.remove(i);
			}
		}
		addThread(toOrganize);
		
	}
}
